package com.zhou.service;

import com.zhou.bean.Express;
import com.zhou.dao.ExpressDao;
import com.zhou.dao.impl.ExpressDaoImpl;
import com.zhou.utils.RandomUtil;

import java.util.List;
import java.util.Map;

public class ExpressService {
    static ExpressDao dao = new ExpressDaoImpl();
    /**
     * 用于查询数据库中的全部快递总数加新增，待取件快递总数加新增
     *
     * @return [{size:总数,day:新增},{size:总数,day:新增}]
     */
    public static List<Map<String, Integer>> console() {
        return dao.console();
    }

    /**
     * 用于查询所有快递
     *
     * @param limit     是否分页的标记，true表示查询所有快递
     * @param pageIndex 页数
     * @param pageSize  页面大小
     * @return 快递的集合
     */

    public static List<Express> findAll(boolean limit, int pageIndex, int pageSize) {
        return dao.findAll(limit,pageIndex,pageSize);
    }

    /**
     * 根据快递单号，查询快递信息
     *
     * @param number 单号
     * @return 查询快递信息，单号不存在时返回null
     */

    public static Express findByNumber(String number) {
        return dao.findByNumber(number);
    }

    /**
     * 根据快递取件码，查询快递信息
     *
     * @param code 取件码
     * @return 查询快递信息，取件码不存在时返回null
     */

    public static Express findByCode(String code) {
        return dao.findByCode(code);
    }

    /**
     * 根据用户手机号，查询所有快递信息
     *
     * @param userPhone 手机号码
     * @return 查询快递信息列表
     */

    public static List<Express> findByUserPhone(String userPhone) {
        return dao.findByUserPhone(userPhone);
    }

    /**
     * 根据录入人手机号，查询录入的所有记录
     *
     * @param sysPhone 单号
     * @return 查询快递信息列表
     */

    public static List<Express> findBySysPhone(String sysPhone) {
        return dao.findBySysPhone(sysPhone);
    }

    /**
     * 快递的录入
     *
     * @param express 录入的快递对象
     * @return 录入的结果 true表示成功 false表示失败
     */

    public static boolean insert(Express express) {
        int code = RandomUtil.getCode();
        express.setCode(code+"");
        try {
            boolean insert = dao.insert(express);
            if (insert) System.out.println("取件码为："+code);
            return insert;
        } catch (Exception e) {
            return insert(express);
        }
    }

    /**
     * 快递的修改
     *
     * @param id         要修改的快递id
     * @param newExpress 修改的快递对象（number,company,username,userPhone）
     * @return 录入的结果 true表示成功 false表示失败
     */

    public static boolean update(int id, Express newExpress) {
        if (newExpress.getUserPhone()!=null){
            dao.delete(id);
            return insert(newExpress);
        }else{
            boolean update = dao.update(id, newExpress);
            Express byNumber = dao.findByNumber(newExpress.getNumber());
            if (newExpress.getStatus() == 1){
                dao.updateStatus(byNumber.getCode());
            }
            return update;
        }
    }

    /**
     * 更改快递的状态为1，表示取件完成
     *
     * @param code 要修改的快递单号
     * @return 修改的结果，true表示成功，false表示失败
     */

    public static boolean updateStatus(String code) {
        return dao.updateStatus(code);
    }

    /**
     * 根据id，删除单个快递信息
     *
     * @param id 要删除的快递id
     * @return 删除的结果，true表示成功，false表示失败
     */

    public static boolean delete(int id) {
        return dao.delete(id);
    }
}
